1100 ON COMM GOSUB 8600,23400,9000,9100,23000,8500,33500,23300,23100,22000,21000,9300,8000,9400,8700,23500,8200,23200,8060,9500,9200,24100,24000,26000,24200,2200,1500,25001,25002
1110 IF COMM=5 OR COMM=7 OR COMM=8 OR COMM=9 OR COMM=11 OR COMM=16 OR COMM=20 THEN 1200
1120 IF COMM=10 OR COMM=22 THEN 1250
1130 IF COMM=15 THEN 1270
1190 GOTO 1000
1200 IF GO=0 THEN 1000
1210 IF T!<>0 THEN GOSUB 30000
1220 IF AD<>0 THEN CHAIN "TREKFINE"
1230 IF G(QX,QY)=1000 THEN GOSUB 33000:GOTO 1200
1240 GOTO 1260
1250 IF GO=0 THEN 1000
1260 IF HE<>0 THEN GOSUB 20000
1265 GOTO 1000
1270 IF GO=0 THEN 1000
1280 IF HE<>0 THEN GOSUB 20000
1285 SC=0:GOTO 1000
1500 RETURN:' dummy
2200 'TERM
2210 FIN=0:CHAIN "TREKFINE
8000 ' srscan
8005 ' IF DO=1 THEN RS$="N":GOTO 8030
8007 IF D!(1)<>0 THEN PRINT "S. R. Scanner damaged !":RETURN
8010 GOSUB 10000
8020 IF BDKEY$="A" AND LEFT$(BDS$,1)="N" THEN RS$="N" ELSE RS$="Y"
8030 S(QX,QY)=1
8040 LS$="Y"
8050 PRINT:PRINT " 1 2 3 4 5 6 7 8 9 10"
8055 K=0:GOTO 8300
8060 ' request entry
8070 GOSUB 10000
8080 IF BDKEY$="A" THEN 8090
8085 PRINT " Information desired ? ";:GOSUB 11000:GOTO 8070
8090 IF LEN(BDS$)>2 THEN BDS$=LEFT$(BDS$,2)
8095 RESTORE 8150
8100 FOR K=1 TO 10:READ COMMAND$:IF LEFT$(COMMAND$,LEN(BDS$))=BDS$ THEN 8220 ELSE NEXT K
8150 DATA "DA","CO","PO","LS","WA","EN","TO","SH","KL","TI"
8200 ' ENTRY FOR STATUS
8210 K=0
8220 LS$="N":RS$="Y"
8300 FOR L=1 TO 10
8310 JJ=L:IF K<>0 THEN JJ=K
8320 IF LS$<>"Y" THEN 8347
8330 PRINT USING "## ";L;
8340 FOR N=1 TO 10:PRINT CHR$(Q(L,N));" ";:NEXT N
8345 PRINT " ";
8347 IF RS$<>"Y" THEN PRINT:GOTO 8360
8350 ON JJ GOSUB 8400,8410,8420,8430,8440,8450,8460,8470,8480,8490
8360 IF K=0 THEN NEXT L
8399 RETURN
8400 PRINT "Stardate........";:PRINT USING "####.#";D!:RETURN
8401 RETURN
8410 PRINT "Condition.......";:IF C=ASC("Y") THEN PRINT "Yellow" ELSE IF C=ASC("G") THEN PRINT "Green" ELSE IF C=ASC("R") THEN PRINT "Red" ELSE IF C=ASC("D") THEN PRINT "Docked" ELSE PRINT "Strange"
8640 FOR I=1 TO 8:PRINT " :":PRINT I;":";:FOR J=1 TO 8:PRINT " ";
8645 IF I=QX AND J=QY THEN COLOR 26
8650 IF S(I,J)<0 THEN PRINT " .1."; ELSE IF S(I,J)=0 THEN PRINT " ..."; ELSE IF S(I,J)>999 THEN PRINT USING "####";S(I,J)-1000; ELSE PRINT USING "####";G(I,J);
8655 IF I=QX AND J=QY THEN COLOR 7
8660 NEXT J:PRINT:NEXT I
8670 PRINT:PRINT "The ";S$;" is currently in quadrant";QX;"-";QY;"."
8690 RETURN
8700 ' shields
8710 GO=0:GOSUB 10000
8720 IF BDKEY$="A" THEN 8840
8730 MSG$="Do you wish to transfer shield energy ? ":GOSUB 8980
8750 IF I$="Y" THEN 8930
8760 IF D!(8)=0 THEN IF SU=1 THEN 8810 ELSE 8770
8761 PRINT "Shields damaged and down !":RETURN
8770 ' entry shldsup
8780 MSG$="Shields are down. Do you want them up ? ":GOSUB 8980
8790 IF I$="Y" THEN 8850 ELSE RETURN
8810 MSG$="Shields are up. Do you want them down ? ":GOSUB 8980
8820 IF I$="Y" THEN 8900 ELSE RETURN
8840 IF LEFT$(BDS$,1)="T" THEN 8930 ELSE IF D!(8)<>0 THEN 8761 ELSE IF LEFT$(BDS$,1)="U" THEN 8850 ELSE IF LEFT$(BDS$,1)="D" THEN 8900 ELSE 8730
8850 ' shields up
8860 IF SU<>0 THEN PRINT "Shields are already up !":RETURN
8870 SU=1:SC=1:IF C<>ASC("D") THEN E!=E!-50
8880 PRINT "Shields raised."
8890 IF E!<=0 THEN PRINT "Shields use up last of energy !":FIN=4:CHAIN "TREKFINE" ELSE GO=1:RETURN
8900 ' shields down
8910 IF SU=0 THEN PRINT "Shields already down !":RETURN
8935 GOSUB 10000:IF BDKEY$<>"F" THEN IF BDKEY$="I" THEN BDF!=BDI ELSE PRINT "Energy to transfer to shields: ";:GOSUB 11000:GOTO 8935
8936 IF BDF!=0 THEN RETURN
8938 IF BDF!>E! THEN PRINT "Insufficient ship energy.":RETURN
8940 GO=1:S!=S!+BDF!:E!=E!-BDF!
8942 IF S!>NSH! THEN PRINT "Shield energy maximized.":PRINT "Excess energy requsted returned to ship energy.":E!=E!+S!-NSH!:S!=NSH!:RETURN
8944 IF BDF!>0 OR E!<=NE! THEN 8948
8946 PRINT "Engineering to bridge--":PRINT " Scott here. Power circuit problem, Captain.":PRINT " I can't drain the shields.":E!=E!+BDF!:S!=S!-BDF!:GO=0:RETURN
8948 IF S!<=0 THEN PRINT "All shield energy transferred to ship.":E!=E!+S!:S!=0:RETURN
8952 PRINT " energy ";:IF BDF!>0 THEN PRINT "to"; ELSE PRINT "from";
8954 PRINT " shields."
8960 RETURN
8980 I$=INKEY$:IF LEN(I$)<>0 THEN 8980: 'flush
8985 PRINT MSG$;
8990 I$=INKEY$:IF LEN(I$)<>1 THEN 8990 ELSE IF I$>="a" AND I$<="z" THEN I$=CHR$(ASC(I$)-32)
8995 IF I$="Y" THEN PRINT "Yes" ELSE PRINT "No"
8999 RETURN
9000 ' dock
9010 IF C=ASC("D") THEN PRINT "Already docked !":RETURN
9020 IF O<>0 THEN PRINT "You must first leave standard orbit.":RETURN
9030 IF BX=0 THEN GOTO 9050
9040 IF ABS(SX-BX)<=1 AND ABS(SY-BY)<=1 THEN 9060
9050 PRINT "Not adjacent to base !":RETURN
9060 C=ASC("D"):IF E!<NE! THEN E!=NE!
9070 S!=NSH!:T=NT:L!=NL!
9080 PRINT "Docked."
9099 RETURN
9100 ' damage report
9110 RESTORE 9195
9120 JDAM=0
9130 FOR I=1 TO ND
9140 READ DEV$
9150 IF D!(I)<=0 THEN 9185
9160 IF JDAM<>0 THEN 9180
9170 PRINT "DEVICE -REPAIR TIMES-":PRINT " IN FLIGHT DOCKED":PRINT:JDAM=1
9180 PRINT DEV$;TAB(25);
9182 IF I<>14 THEN PRINT USING "####.## ###.##";D!(I),D!(I)*DF! ELSE PRINT " - 9.99"
9185 NEXT I:IF JDAM=0 THEN PRINT "All devices functional."
9190 RETURN
9195 DATA "S. R. Sensors","L. R. Sensors","Phasers","Photon tubes","Life support","Warp Engines","Impulse engines","Shields","Subspace radio","Shuttle craft","Computer","Transporter","Shield control","Experimental Deathray"
9200 ' set warp factor
9210 GOSUB 10000:IF BDKEY$<>"F" THEN IF BDKEY$="I" THEN BDF!=BDI ELSE PRINT "Warp factor : ";:GOSUB 11000:GOTO 9210
9215 IF D!(6)>10 THEN PRINT "Warp engines inoperative.":RETURN
9220 IF D!(6)>0 AND BDF!>4 THEN PRINT "Engineer Scoot: I'm doing my best, Captain,":PRINT " but right now we can only go warp 4.":RETURN
9225 IF BDF!<1 THEN PRINT "Helmsman Sulu: We can't go below warp 1, Captain.":RETURN
9230 IF BDF!>10 THEN PRINT "Helmsman Sulu: Our top speed is warp 10, Captain.":RETURN
9235 OLDFAC!=W!:W!=BDF!:WS!=W!*W!
9240 IF W!<=OLDFAC! OR W!<=6 THEN PRINT "Helmsman Sulu: Warp factor ";:PRINT USING "##.#";W!;:PRINT ", Captain.":RETURN
9245 IF W!<8 THEN PRINT "Engineer Scott: Aye, but our maximum safe speed is warp 6.":RETURN
9250 IF W!=10 THEN PRINT "Engineer Scott: Aye, Captain, we'll try it.":RETURN
9260 PRINT "Engineer Scott: Aye, Captain, but our engines may not take it."
20335 FOR LLL=2 TO LL:IF J=CDAM(LLL-1) THEN 20355 ELSE NEXT LLL
20340 KTR=KTR+1:IF KTR>3 THEN PRINT
20345 PRINT " and ";
20350 GOSUB 20390:PRINT DEV$;
20355 NEXT LL
20360 PRINT " damaged.":ERASE CDAM
20365 IF D!(8)<>0 AND SU<>0 THEN PRINT "***SHIELDS KNOCKED DOWN.":SU=0
20370 IF IFRY<>0 THEN RETURN
20375 E!=E!-CR!(1)
20379 GOTO 20100
20390 RESTORE 20398:FOR D=1 TO J:READ DEV$:NEXT D:RETURN
20398 DATA "S. R. Sensors","L. R. Sensors","Phasers","Photon Tubes","Life Support","Warp Engines","Impulse Engines","Shields","Subspace Radio","Shuttle Craft","Computer","Transporter","Shield Control","Experimental Deathray"
20400 IF ATTCKD=0 THEN RETURN
20410 IF E!<=0 THEN FIN=5:CHAIN "TREKFINE"
20420 PERCNT=INT(100*PFAC!*S!+0.5)
20430 IF IHURT<>0 THEN 20450
20440 PRINT "Enemies attack--shield strength reduced to ";:GOTO 20460
20450 PRINT:PRINT "Energy left ";:PRINT USING "####.#";E!;:PRINT " Shields ";:IF SU<>0 THEN PRINT "up, "; ELSE IF D!(8)>0 THEN PRINT "damaged, "; ELSE PRINT "Down, ";
20460 PRINT USING "###";PERCNT;:PRINT "% ";T;"torpedoes left"
20470 IF HITMAX!<200 AND HITTOT!<500 THEN 20490
20475 ICAS=INT(HITTOT!*RND(1)*0.015):IF ICAS<2 THEN 20490
20480 PRINT:PRINT "Mc Coy: Sickbay to bridge. We suffered"ICAS"casualties in that last attack.":CS=CS+ICAS:GOTO 20490
20485 PRINT "***Enemies attack-starbase shields protect the ";S$;"."
20490 FOR L=1 TO HE:KA!(L)=KD!(L):NEXT L
20495 GOSUB 20500
20499 RETURN
20500 ' SORTKL
20510 IF HE<=1 THEN RETURN
20520 SWITCH=0
20530 FOR KL=1 TO HE-1:IF KD!(KL)>KD!(KL+1) THEN SWAP KD!(KL),KD!(KL+1):SWAP KA!(KL),KA!(KL+1):SWAP KX(KL),KX(KL+1):SWAP KY(KL),KY(KL+1):SWAP KP!(KL),KP!(KL+1):SWITCH=1
20540 NEXT KL:IF SWITCH<>0 THEN 20520 ELSE RETURN
21000 ' photons
21010 MISFIR=0:GO=0:IF D!(4)<>0 THEN PRINT "Photon tubes damaged !":RETURN
21020 IF T=0 THEN PRINT "No torpedoes left !":RETURN
21030 GOSUB 10000:IF BDKEY$="I" THEN 21040
21032 PRINT T"torpedoes left."
21035 PRINT "Number of torpedoes to fire: ";:GOSUB 11000:GOTO 21030
21040 IF BDI<1 THEN RETURN ELSE IF BDI>3 THEN PRINT "Maximum of 3 torpedoes per burst.":GOTO 21035 ELSE IF BDI>T THEN 21032
21050 GO=1:N=BDI
21055 DIM TARG!(3,2),COURSE!(3)
21057 PRMT=0
21060 FOR I=1 TO N
21070 GOSUB 10000:IF BDKEY$="I" THEN BDF!=BDI:GOTO 21091 ELSE IF BDKEY$="F" THEN 21091 ELSE IF BDKEY$="*" AND I<>1 AND PRMT<>1 THEN 21100
21080 PRMT=1:PRINT "Target sector for torpedo number"I": ";:GOSUB 11000:GOSUB 10000
21090 IF BDKEY$="I" THEN BDF!=BDI:GOTO 21091 ELSE IF BDKEY$<>"F" THEN 21097
21091 TARG!(I,1)=BDF!
21092 GOSUB 10000:IF BDKEY$="I" THEN BDF!=BDI:GOTO 21093 ELSE IF BDKEY$<>"F" THEN 21097
21093 TARG!(I,2)=BDF!
21095 NEXT I
21096 GOTO 21110
21097 PRINT "Beg your pardon, Captain ?"
21098 ERASE TARG!,COURSE!:GO=0:RETURN
21100 FOR I=I TO N:TARG!(I,1)=TARG!(I-1,1):TARG!(I,2)=TARG!(I-1,2):NEXT I
21110 FOR I=1 TO N:FOR J=1 TO 2:IF TARG!(I,J)<1 OR TARG!(I,J)>10 THEN 21097 ELSE NEXT J,I
21140 IF DELTX!=0 AND DELTY!=0 THEN PRINT "Spock to Sickbay. Dr. McCoy, I recommend an immediate review of the captain's";:PRINT "psychological profile.":GOTO 21098
21150 IF DELTY!=0 THEN Z!=SGN(DELTX!)*1E+37 ELSE Z!=DELTX!/DELTY!
21160 TD!=ATN(-Z!)*1.90986:IF TD!<=0 THEN TD!=12+TD!
21165 IF DELTY!>=0 THEN IF TD!<=6 THEN TD!=TD!+6 ELSE TD!=TD!-6
21170 COURSE!(I)=TD!:IF DB=1 THEN PRINT "<COURSE("I")="COURSE!(I)">
21180 NEXT I
21200 FOR I=1 TO N:IF C<>ASC("D") THEN T=T-1
21210 J=I:R!=(RND(1)+RND(1))*0.5-0.5:IF ABS(R!)<0.47 THEN 21260
21220 R!=(RND(1)+1.2)*R!:MISFIR=1:IF N>1 THEN 21240
21230 PRINT "***TORPEDO MISFIRES.":GOTO 21250
21240 PRINT "***TORPEDO NUMBER"I"MISFIRES.":IF I<N THEN PRINT " Remainder of burst aborted."
21250 IF RND(1)>0.2 THEN 21595
21255 PRINT "***Photon tubes damaged by misfire.":D!(4)=DF!*(1+2*RND(1)):GOTO 21595
21260 IF SU<>0 OR C=ASC("D") THEN R!=R!+0.000999999*S!*R!
22140 FOR IEN=1 TO HE:HITS!(IEN)=0:IF POWREM!<=0 THEN
22145 HITS!(IEN)=ABS(KP!(IEN))/(PHASFC!*0.9^KD!(IEN)):OVER!=0.01*RND(1)*HITS!(IEN):TEMP!=POWREM!:POWREM!=POWREM!-HITS!(IEN)-OVER!:IF POWREM!<=0 THEN IF HITS!(IEN)>TEMP! THEN HITS!(IEN)=TEMP!
22150 IF POWREM!<=0 THEN OVER!=0
22155 EXT!=EXT!+OVER!:NEXT IEN
22158 IF POWREM!>0 THEN EXT!=EXT!+POWREM!
22160 GOSUB 22400:'hitem(hits)
22162 IF EXT!=0 OR AD<>0 THEN 22290
22163 PRINT USING "####.##";EXT!;:PRINT " expended on empty space.":GOTO 22290
22170 ' manual
22180 PRINT "Battle computer damaged; manual fire only.":GOTO 22200
22190 PRINT "---WORKING---":PRINT "Short range sensors damaged. Insufficient data for automatic fire.":PRINT "Manual fire must be used.":PRINT
22200 PRINT "Energy available = ";:PRINT USING "####.##";E!:IEK=1
22205 IF IPOOP=0 THEN 22220
22210 PRINT USING "(####.#) ";ABS(KP!(IEK))/(PHASFC!*0.9^KD!(IEK))*(1.01+0.05*RND(1))+1;
22220 IEX=KX(IEK):IEY=KY(IEK):PRINT "Units to fire at ";:PRE=Q(IEX,IEY):GOSUB 32900:PRINT " at"IEX"-"IEY":";
22225 GOSUB 11000:IF IEK=1 THEN POW!=0
22230 GOSUB 10000
22232 IF BDKEY$="I" THEN HITS!(IEK)=BDI:GOTO 22240 ELSE IF BDKEY$="F" THEN HITS!(IEK)=BDF!:GOTO 22240
22233 IF BDKEY$="*" THEN HITS!(IEK)=0:GOTO 22240
22235 IF BDKEY$="A" THEN IF LEFT$(BDS$,1)="N" THEN NO=1
22239 GOTO 22205
22240 IF HITS!(IEK)<0 THEN 22285
22245 POW!=POW!+HITS!(IEK):IF POW!>E! THEN PRINT "Available energy exceeded.":GOTO 22200
22250 IEK=IEK+1:IF IEK<=HE THEN 22205
22255 IF POW!=0 THEN 22285
22260 GOSUB 10000:IF BDKEY$="A" AND LEFT$(BDS$,1)="N" THEN NO=1
23450 E!=E!+5000*(1+0.9*RND(1)):CR=0:PRINT "The instruments are going crazy, but i think":PRINT "it's going to work. CONGRATULATIONS, Sir.":RETURN
23500 'shuttle
23510 MS=1
23512 IF D!(10)=0 THEN 23525
23520 IF D!(10)>0 THEN MS(1)=69:GOSUB 15000:RETURN ELSE IF D!=-1 THEN MS(1)=70:GOSUB 15000:RETURN ELSE MS(1)=71:GOSUB 15000:RETURN
23525 IF O<>1 THEN MS(1)=134:GOSUB 15000:RETURN
23530 IF SU=1 OR C=ASC("D") THEN MS(1)=68:GOSUB 15000:RETURN
23535 IF P(P,5)<>1 THEN 23227
23540 T!=2.9998E-05*H!:IF T!<0.8*RT! THEN 23545
23542 PRINT "First Officier Spock: Captain, I compute that such a maneuver would":PRINT "require approximately ";:PRINT USING "###.#";100*T!/RT!;:PRINT "% of our remaining time.":GOSUB 23290:IF I$<>"Y" THEN RETURN
23545 IF LD<>1 THEN 23580
23550 IF CG<>1 THEN 23570
23555 IF D!(12)=0 THEN MSG$="Spock: Would you rather use the transporter ? ":GOSUB 8980:IF I$<>"N" THEN PRINT "No":RETURN ELSE PRINT "Yes" PRINT "Shuttle crew"; ELSE PRINT "Rescue party";